﻿/*
 * Creado por SharpDevelop.
 * Usuario: Programador
 * Fecha: 28/05/2012
 * Hora: 07:57 p.m.
 * 
 * Para cambiar esta plantilla use Herramientas | Opciones | Codificación | Editar Encabezados Estándar
 */
using System;
using System.IO;
using System.Linq.Expressions;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Web;

namespace Turnos_Micro
{
	/// <summary>
	/// Description of Modelo.
	/// </summary>
	public class Modelo
	{
		private const string MARES = "http://mibionet.red-udea/vanguardia/sitio/index.php/mares/";
		private const string PC = 	 "http://mibionet.red-udea/vanguardia/sitio/index.php/validador_pc/";
		
		public string validarUsuario(string usr, string pwd)
		{
			// Validamos si el usuario existe en mares
			//  Acceso por el portal
			//  Fuente: http://www.elguille.info/net/dotnet/system_net_acceder_pagina_web.aspx
			
			// Se debe encriptar la informacion que se pasa al servidor por motivos de seguridad.
			//usr = Comunicaciones.encripta(usr,Comunicaciones.KEY_CRIPT);
			//pwd = Comunicaciones.encripta(pwd,Comunicaciones.KEY_CRIPT);
			
			//Se cambian las opciones que pueden causar problemas en la url.
			//usr = usr.Replace("/","\\");
			//pwd = pwd.Replace("/","\\");
			
			
			
			// Crear la solicitud de la URL.
			string url = PC + "valida_usuario/";
			
			Dictionary<string,string> d = new Dictionary<string,string>();
			d.Add("usr", usr);
			d.Add("pwd", pwd);
			return this.GetResponse(url, "POST", d);
			
			WebRequest wr = (HttpWebRequest)WebRequest.Create(url);
			wr.Method = "POST";
			
			// Codificación
			// Preparamos las variables para realizar la petición
			
			StringBuilder param = new StringBuilder();
			param.Append("usr="+usr);
			
//			string resp = this.peticionServer(param.ToString(), url);
//			return resp;
			
			System.Text.ASCIIEncoding encoding = new ASCIIEncoding();
			byte[] b1 = encoding.GetBytes(param.ToString());
			wr.ContentType = "application/x-www-form-urlencoded";
			wr.ContentLength = b1.Length;
			
			System.IO.Stream newStream = wr.GetRequestStream();
			newStream.Write(b1, 0, b1.Length);
			newStream.Close();
			
			
			if (wr == null)
				return "Falló" ;
			
			// Obtener la respuesta.
			WebResponse response = wr.GetResponse();
			if (response == null) return "Fail";
			
			// Abrir el stream de la respuesta recibida.
			StreamReader reader =
				new StreamReader(response.GetResponseStream());
			
			// Leer el contenido.
			string res = reader.ReadToEnd();
			
			// Cerrar los streams abiertos.
			reader.Close();
			response.Close();
			Console.WriteLine(url);
			Console.WriteLine(res);
			
			//res = url;
			// Mostrarlo.
			// Desemcriptamos la información y la retornamos.
			//res = Comunicaciones.desencripta(res,Comunicaciones.KEY_CRIPT);
			return res;
		}//EndFunction validarUsuario
		
		public string peticionServer(string dat, string url){

			WebRequest request = WebRequest.Create (url);
			// Set the Method property of the request to POST.
			request.Method = "POST";
			
			byte[] byteArray = Encoding.UTF8.GetBytes (dat);
			// Set the ContentType property of the WebRequest.
			request.ContentType = "application/x-www-form-urlencoded";
			// Set the ContentLength property of the WebRequest.
			request.ContentLength = byteArray.Length;
			// Get the request stream.
			Stream dataStream = request.GetRequestStream ();
			// Write the data to the request stream.
			dataStream.Write (byteArray, 0, byteArray.Length);
			// Close the Stream object.
			dataStream.Close ();
			// Get the response.
			WebResponse response = request.GetResponse ();
			// Display the status.
			Console.WriteLine (((HttpWebResponse)response).StatusDescription);
			// Get the stream containing content returned by the server.
			dataStream = response.GetResponseStream ();
			// Open the stream using a StreamReader for easy access.
			StreamReader reader = new StreamReader (dataStream);
			// Read the content.
			string responseFromServer = reader.ReadToEnd ();
			// Display the content.
			//Console.WriteLine (responseFromServer);
			// Clean up the streams.
			reader.Close ();
			dataStream.Close ();
			response.Close ();
			
			return responseFromServer;
		}
		
		public string GetResponse(string urlBase, string metodo, Dictionary<string,string> postData){
			// Codificamos los parametros en formato URL
			//  ?key1=valor1&key2=value2...
			bool FirstParam = true;
			StringBuilder p = new StringBuilder();
			foreach(KeyValuePair<string, string> param in postData){
				p.Append(FirstParam? "?" : "&"); // Separadores de parametros
				p.Append(param.Key + "=" + HttpUtility.UrlEncode(param.Value));
			}
			
			
			
			string UrlBaseWithParms = urlBase + p.ToString();
			
			System.Net.WebRequest wr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(UrlBaseWithParms);
			wr.Method = metodo;
			
			// Codificacion
			ASCIIEncoding encoding = new ASCIIEncoding();
			byte[] b1 = encoding.GetBytes(p.ToString());
			wr.ContentType = "application/x-www-form-urlencoded";
			wr.ContentLength = b1.Length;
			
			// Enviamos los parametros
			System.IO.Stream newStream = wr.GetRequestStream();
			newStream.Write(b1, 0, b1.Length);
			newStream.Close();
			
			// Obtiene la respuesta
			WebResponse response = wr.GetResponse();
			// Stream con el contenido recibido del servidor
			newStream = response.GetResponseStream();
			StreamReader sr = new StreamReader(newStream);
			// Leemos el contenido
			string responseFromServer = sr.ReadToEnd();
			
			// Cerramos los streams
			sr.Close();
			newStream.Close();
			response.Close();
			
			return responseFromServer;
		}
		
		
	} //EndClass Modelo
}
